<?php
    function val_email($email)
    {
        $isValid = true;
        $atIndex = strrpos($email, "@");
        if (is_bool($atIndex) && !$atIndex) {
            $isValid = false;
        }
        else
        {
            $domain = substr($email, $atIndex + 1);
            $local = substr($email, 0, $atIndex);
            $localLen = strlen($local);
            $domainLen = strlen($domain);
            if ($localLen < 1 || $localLen > 64) {
                // local part length exceeded
                $isValid = false;
            }
            else if ($domainLen < 1 || $domainLen > 255) {
                // domain part length exceeded
                $isValid = false;
            }
            else if ($local[0] == '.' || $local[$localLen - 1] == '.') {
                // local part starts or ends with '.'
                $isValid = false;
            }
            else if (preg_match('/\\.\\./', $local)) {
                // local part has two consecutive dots
                $isValid = false;
            }
            else if (!preg_match('/^[A-Za-z0-9\\-\\.]+$/', $domain)) {
                // character not valid in domain part
                $isValid = false;
            }
            else if (preg_match('/\\.\\./', $domain)) {
                // domain part has two consecutive dots
                $isValid = false;
            }
            else if
            (!preg_match('/^(\\\\.|[A-Za-z0-9!#%&`_=\\/$\'*+?^{}|~.-])+$/',
                         str_replace("\\\\", "", $local))
            ) {
                // character not valid in local part unless
                // local part is quoted
                if (!preg_match('/^"(\\\\"|[^"])+"$/',
                                str_replace("\\\\", "", $local))
                ) {
                    $isValid = false;
                }
            }
       }
        return $isValid;
    }

    function gen_random_passwd($len) {
        $chars = "abcdefghijkmnopqrstuvwxyz023456789";
        srand((double)microtime()*1000000);
        $i = 0;
        $pass = '' ;

        while ($i <= $len) {
            $num = rand() % 33;
            $tmp = substr($chars, $num, 1);
            $pass = $pass . $tmp;
            $i++;
        }
    
        return $pass;
    }

    if (isset($_GET['val']) && isset($_GET['email'])) {
        $email = mysql_real_escape_string($_GET['email']);
        $sql = "SELECT `u_reset_passwd` FROM " . $prefix . "nguoidung WHERE `u_email`='" . $email . "'";
        $resource = $db->query($sql);
        $row = mysql_fetch_array($resource);
        $val_db = $row['u_reset_passwd'];
        if ($val = $val_db) {
            echo "Mật khẩu mới đã được gửi đến email của bạn. Xin vui lòng check mail để nhận mật khẩu mới";
            $headers = 'From: admin@chocuatui.vn' . "\r\n" .
                           'Reply-To: admin@chocuatui.vn' . "\r\n";
            $subject = "Thông tin reset mật khẩu";
            $new_pass = gen_random_passwd(8);
            $sql = "UPDATE `" . $prefix .  "nguoidung` SET `u_pass`='" . md5($new_pass) ."' WHERE `u_email`='" . $email . "'";
            $db->query($sql);
            $message = "Mật khẩu mới của bạn: " . $new_pass;
            mail($email, $subject, $message, $headers);
            $sql = "UPDATE `" . $prefix .  "nguoidung` SET `u_reset_passwd`='" . NULL ."' WHERE `u_email`='" . $email . "'";
            $db->query($sql);
        }
        else {
            header("Location: index.php");
        }
    }
    else if (isset($_POST['email'])) {
        $email = $_POST['email'];
        if (val_email($email)) {
            $email = mysql_real_escape_string($email);
            $sql = "SELECT * FROM " . $prefix . "nguoidung WHERE `u_email`='" . $email ."'";
            $resource = $db->query($sql);
            $rows = mysql_fetch_row($resource);
            
            if ($rows) {
                // 32 characters text for validation
                $val = md5(gen_random_passwd(32));
                $sql = "UPDATE `" . $prefix .  "nguoidung` SET `u_reset_passwd`='" .$val ."' WHERE `u_email`='" . $email . "'";
                $db->query($sql);
                $headers = 'From: admin@chocuatui.vn' . "\r\n" .
                           'Reply-To: admin@chocuatui.vn' . "\r\n";
                $subject = "Thông tin reset mật khẩu";
                $message = "Xin vui lòng ấn vào link sau để reset mật khẩu: " . $_SERVER['HTTP_REFERER'] . "&email=". $email.  "&val=" . $val;
                mail($email, $subject, $message, $headers);
                echo "Một email đã được gửi tới hòm thư của bạn. Xin vui lòng check mail";
            }
            else {
                echo "Email không tồn tại trong cơ sở dữ liệu";
            }
        }
        else {
            echo "Email nhập vào là không hợp lệ";                        
        }
    }
    else { ?>
        <div style="text-align: left" id="reset-pwd">
            <h4>
                Nhập email của bạn vào đây để lấy lại mật khẩu:
            </h4>
            <form name="reset-pwd"  method="POST" action="?mod=quenmatkhau">
                <div class="form-ent">
                    Email: <input type="text" name="email"/>
                </div>
                <br/>
                <input type="submit" name="fsubmit"/>
            </form>
        </div>        
<?php
    }
?>

